package veterinaria.manager;

import geral.manager.GenericManager;
import geral.manager.UtilManager;
import geral.util.FacesUtil;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Inject;
import javax.inject.Named;

import br.com.sgc.entities.geral.Cliente;
import br.com.sgc.entities.hotelaria.Hospedagem;
import br.com.sgc.entities.hotelaria.ItensHospedagem;
import br.com.sgc.entities.hotelaria.UnidadeHospedagem;
import br.com.sgc.entities.veterinaria.Animal;
import br.com.sgc.exception.ValidacaoException;
import br.com.sgc.session.HospedagemSession;

@Named
@ConversationScoped
public class HospedagemManager extends GenericManager implements Serializable {

	private static final long serialVersionUID = -2753302697426331145L;
	
	@Inject private UtilManager utilManager;
	
	@EJB private HospedagemSession hospedagemSession;
	
	private Hospedagem hospedagem = new Hospedagem();
	
	private List<UnidadeHospedagem> unidades = new ArrayList<UnidadeHospedagem>();
	
	private UnidadeHospedagem unidade = new UnidadeHospedagem();
	
	private List<Cliente> clientes = new ArrayList<Cliente>();
	
	private Animal hospede = new Animal();
	
	private ItensHospedagem itensHospedagem = new ItensHospedagem();
	
	private Boolean showPanelCadastro;

	public String list(){
		utilManager.getClienteManager().list(); 
		unidades = utilManager.getUnidadeHospedagemManager().getUnidadeSession().findAll(UnidadeHospedagem.class,  utilManager.getSegurancaManager().getUsuarioLogado().getClinica().getId(), true);
		return "formHospedagem";
	}
	
	public void prepareSave(){
		hospedagem = new Hospedagem();
		hospede = new Animal();
		itensHospedagem = new ItensHospedagem();
		clientes = new ArrayList<Cliente>();
		utilManager.getClienteManager().prepareSave();
		unidade = utilManager.getUnidadeHospedagemManager().getUnidadeSession().findById(UnidadeHospedagem.class, unidade.getId());
		hospedagem.setUnidadeHospedagem(unidade); 
	}
	
	public void save(){
		try {
			hospedagem.setClinica(utilManager.getSegurancaManager().getUsuarioLogado().getClinica());
			hospedagemSession.save(hospedagem);
			list();
			FacesUtil.mensInfo("Hospedagem Concluída com sucesso.");
		} catch (ValidacaoException e) {
			e.printStackTrace();
			FacesUtil.mensErro(e.getMessage());
		}
		
	}
	
	public void showDetalhes(){
		hospedagem = hospedagemSession.findHospedagemByUnidade(unidade);
		utilManager.getClienteManager().setCliente(hospedagem.getAnimal().getDonoAnimal());
	}

	public void searchClientes(){	
		utilManager.getClienteManager().getCliente().setAnimal(utilManager.getAnimalManager().getAnimalSession().findByHospedagem(utilManager.getClienteManager().getCliente()));
	}
	
	public void selectHospede(){
		hospedagem.setAnimal(utilManager.getAnimalManager().getAnimalSession().findById(Animal.class, hospede.getId()));
	}
	
	public void addItensHospedagem(){
		itensHospedagem.setDevolvido(false);
		itensHospedagem.setHospedagem(hospedagem);
		hospedagem.getItensHospedagem().add(itensHospedagem);
		itensHospedagem = new ItensHospedagem();
	}
	
	public void liberarHospedagem(){
		try {
			hospedagemSession.liberarHospedagem(hospedagem);
			list();
			FacesUtil.mensInfo("Unidade Liberada com sucesso.");
		} catch (ValidacaoException e) {
			e.printStackTrace();
			FacesUtil.mensErro(e.getMessage());
		}
		
	}
	

	public HospedagemSession getHospedagemSession() {
		return hospedagemSession;
	}

	public void setHospedagemSession(HospedagemSession hospedagemSession) {
		this.hospedagemSession = hospedagemSession;
	}

	public Hospedagem getHospedagem() {
		return hospedagem;
	}

	public void setHospedagem(Hospedagem hospedagem) {
		this.hospedagem = hospedagem;
	}

	public List<UnidadeHospedagem> getUnidades() {
		return unidades;
	}

	public void setUnidades(List<UnidadeHospedagem> unidades) {
		this.unidades = unidades;
	}

	public List<Cliente> getClientes() {
		return clientes;
	}

	public void setClientes(List<Cliente> clientes) {
		this.clientes = clientes;
	}

	public Boolean getShowPanelCadastro() {
		return showPanelCadastro;
	}

	public void setShowPanelCadastro(Boolean showPanelCadastro) {
		this.showPanelCadastro = showPanelCadastro;
	}

	public UnidadeHospedagem getUnidade() {
		return unidade;
	}

	public void setUnidade(UnidadeHospedagem unidade) {
		this.unidade = unidade;
	}

	public Animal getHospede() {
		return hospede;
	}

	public void setHospede(Animal hospede) {
		this.hospede = hospede;
	}

	public ItensHospedagem getItensHospedagem() {
		return itensHospedagem;
	}

	public void setItensHospedagem(ItensHospedagem itensHospedagem) {
		this.itensHospedagem = itensHospedagem;
	}
}
